Ubuntu安装nginx并更换安装目录

ubuntu安装nginx并更换安装目录

在 Ubuntu 上安装 nginx 时,默认情况下,nginx 会被安装在系统的默认路径下,通常是 /usr/sbin/nginx。
Nginx 的配置文件通常位于 /etc/nginx/nginx.conf。

如果想要将 nginx 安装到不同的路径,可以通过以下步骤来实现:

1. 下载 nginx

Nginx 官方提供了源码包,可以从官网下载并自定义安装路径。

下载 Nginx 源码:
访问 Nginx 官网,找到最新的稳定版本(Stable version),复制下载链接。例如:

1
wget https://nginx.org/download/nginx-1.25.3.tar.gz

或者使用 curl

1
curl -L https://nginx.org/download/nginx-1.25.3.tar.gz

2. nginx启动

nginx启动需要一些基础环境,可以通过以下方式安装

1
2
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y

3. 解压并安装ngixn

解压下载的文件,并进入该目录下

1
2
tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3

配置安装路径:
使用 –prefix 参数指定自定义安装路径。例如,将 Nginx 安装到 /home/nginx:

1
./configure --prefix=/home/nginx

编译并安装:

1
2
3
make

sudo make install

4.验证安装并启动

查看自定义安装路径下的文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  
ls /home/nginx
```
如果看到 sbin/nginx、conf/ 等目录,说明安装成功。

也可以通过nginx -v 查看版本信息
```
sudo /home/nginx/sbin/nginx -v
```


启动 Nginx:
```
sudo /home/nginx/sbin/nginx
```

在浏览器中输入 http://127.0.0.1:80 则可以看到nginx 的界面





## 报错问题解决

### 问题一
```
root@jk-work:/home/nginx/sbin$ sudo /home/nginx/sbin/nginx -v
/home/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory
```
原因是缺少nginx 的依赖

解决办法
安装依赖工具:

sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
### 问题二

```
root@jk-work:/home/nginx# sudo /home/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

```

80端口被占用

建议更换nginx 启动端口
备份nginx.conf配置

cd /home/nginx/conf
cp nginx.conf nginx.conf.202505021246.bak

1
2
3
4
5
6
修改配置文件

```
vim nginx.conf
```
将 server 下的 listen 的监听端口80 修改为 10001。
server {
    listen       10001;
    server_name  localhost;
1
2
3
4
此处10001 可换为其他不敏感端口,建议避开,443,8080,1521,6379,等端口,
以及类似端口加1000,加10000的端口号,例如,1443,18080,10080,等端口,此类端口容易被屏蔽或者攻击

重新启动

sudo /home/nginx/sbin/nginx

1
或者查找端口占用程序,并强制杀进程

root@jk-work:/home/nginx/sbin# sudo lsof -i :10001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5691 root 6u IPv4 49172 0t0 TCP *:10001 (LISTEN)
nginx 5692 nobody 6u IPv4 49172 0t0 TCP *:10001 (LISTEN)

sudo netstat -tulnp | grep :80

1
杀死该进程

sudo kill -9
sudo kill -9 5691
sudo kill -9 5692

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

## 其他

启动脚本
start-nginx.sh
```
#!/bin/bash

echo "更新依赖"
sudo apt update
echo "下载nginx 启动依赖"
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y

# 启动 Nginx 服务
echo "启动 Nginx..."
sudo /home/nginx/sbin/nginx

# chmod +x start-nginx.sh
# ./start-nginx.sh

停止脚本
stop-nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash

#此处换成nginx 的启动端口
PORT=10001
MAX_RETRIES=3
RETRY_DELAY=1

# 端口清理函数
cleanup_port() {
for attempt in $(seq 1 $MAX_RETRIES); do
PID=$(lsof -t -i :$PORT 2>/dev/null)

if [ -z "$PID" ]; then
echo "[成功] 端口 $PORT 未被占用"
return 0
fi

echo "[尝试 $attempt/$MAX_RETRIES] 发现进程 $PID 占用端口 $PORT,正在终止..."

kill $PID
sleep $RETRY_DELAY

if ! lsof -t -i :$PORT &>/dev/null; then
echo "[成功] 进程 $PID 已终止,端口 $PORT 已释放"
return 0
fi

echo "[警告] 普通终止失败,尝试强制终止进程 $PID"
kill -9 $PID
sleep $RETRY_DELAY

if ! lsof -t -i :$PORT &>/dev/null; then
echo "[成功] 强制终止成功,端口 $PORT 已释放"
return 0
else
echo "[失败] 第 $attempt 次尝试失败,进程 $PID 仍存在"
fi
done

echo "[错误] 经过 $MAX_RETRIES 次尝试,端口 $PORT 仍被占用"
return 1
}


# 执行端口清理
cleanup_port
CLEANUP_STATUS=$?

# 根据清理结果执行后续操作
if [ $CLEANUP_STATUS -eq 0 ]; then
echo "======== nginx 端口清理成功,开始执行后续操作 ========"

exit 0
else
echo "======== nginx 端口清理失败,终止后续操作 ========"
exit 1
fi

# chmod +x stop-nginx.sh

# ./stop-nginx.sh

谷歌服务器,自用启动脚本
start-nginx2.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash

echo "更新依赖"

sudo apt update
echo "下载nginx 启动依赖"
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y


PORT=10001
MAX_RETRIES=3
RETRY_DELAY=1

# 端口清理函数
cleanup_port() {
for attempt in $(seq 1 $MAX_RETRIES); do
PID=$(lsof -t -i :$PORT 2>/dev/null)

if [ -z "$PID" ]; then
echo "[成功] 端口 $PORT 未被占用"
return 0
fi

echo "[尝试 $attempt/$MAX_RETRIES] 发现进程 $PID 占用端口 $PORT,正在终止..."

kill $PID
sleep $RETRY_DELAY

if ! lsof -t -i :$PORT &>/dev/null; then
echo "[成功] 进程 $PID 已终止,端口 $PORT 已释放"
return 0
fi

echo "[警告] 普通终止失败,尝试强制终止进程 $PID"
kill -9 $PID
sleep $RETRY_DELAY

if ! lsof -t -i :$PORT &>/dev/null; then
echo "[成功] 强制终止成功,端口 $PORT 已释放"
return 0
else
echo "[失败] 第 $attempt 次尝试失败,进程 $PID 仍存在"
fi
done

echo "[错误] 经过 $MAX_RETRIES 次尝试,端口 $PORT 仍被占用"
return 1
}

# 执行端口清理
cleanup_port
CLEANUP_STATUS=$?

# 根据清理结果执行后续操作
if [ $CLEANUP_STATUS -eq 0 ]; then
echo "======== 端口清理成功,开始执行后续操作 ========"

# 在此处添加需要执行的命令(示例)
# ------------------------------------------
# echo "启动服务..."
# /path/to/your/service/start_command
# ------------------------------------------

# 示例:启动测试服务(需要nc工具)
# echo "启动测试服务..."
# nc -lk $PORT &

# 启动 Nginx 服务
echo "Starting Nginx..."
sudo /home/nginx/sbin/nginx
echo "Nginx 启动成功"
exit 0
else
echo "======== 端口清理失败,终止后续操作 ========"
exit 1
fi

# chmod +x start-nginx2.sh

# ./start-nginx2.sh

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

继开 wechat
欢迎加我的微信,共同交流技术